[Android Studio] 打包 jar 路徑位置

[Android Studio] 打包 jar 路徑位置

[Android Studio] jar Export path


2022/10/10
Cover Image for [Android Studio] 打包 jar 路徑位置

最近接到實驗室的需求,要讓 Unity Android 專案支援藍芽連線。其實我原本已經改一個版本可以用,當時是用別人包好的 jar plugin 匯進去。但是現在實驗室說要支援 PIN 驗證,所以只好自己載 Android Studio 去包 jar 了。

Problem

照著 這篇「Android Studio 匯出 JAR 檔」 的指示把 Android Studio 環境建好,也改好 Gradle script (就)

// 移除舊的 jar 檔
task deleteOldJar(type: Delete) {
delete 'release/AndroidPlugin.jar'
}

// 匯出 jar 檔
task exportJar(type: Copy) {
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
// 將匯出的 jar 檔重新命名
rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

執行 exportJar 的 task ,理論上要有 jar 生成在 app/release/底下,但是實際檢查位置並沒有任何輸出。在 gardle 輸出可以發現 exportJar 有 NO-SOURCE 的訊息。

Solution

爬文一下發現是因為各個版本的 android studio 處理 jar 的路徑各不相同,有以下幾種:

  • build/intermediates/bundles/release/
  • build/intermediates/packaged-classes/release/
  • build/intermediates/aar_main_jar/release/

我使用 2021.3 版本是最下面的路徑。
把 gradle script 裡面的路徑稍微修改一下,sync 完執行就沒問題了。

// 移除舊的 jar 檔
task deleteOldJar(type: Delete) {
delete 'release/AndroidPlugin.jar'
}

// 匯出 jar 檔
task exportJar(type: Copy) {
from('build/intermediates/aar_main_jar/release/')
into('release/')
include('classes.jar')
// 將匯出的 jar 檔重新命名
rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)